<?php

use Doctrine\Common\Collections\ArrayCollection;

class Negocio_ClientesController extends Zend_Controller_Action {

    private $_flashMessenger;
    private $_personaDao;
    private $_creditoDao;


    public function init() {
        $this->_helper->_layout->setLayout('layout_negocios');
        
        $this->_flashMessenger = $this->_helper->FlashMessenger;
        
        $auth = Zend_Auth::getInstance();

        if ($auth->hasIdentity()) {
            if (!empty($auth->getIdentity()->id)) {
                $usuarioDao = new Doctrine_Model_UsuariosDoctrineDao();
                $this->view->usuario = $usuarioDao->obtenerPorId($auth->getIdentity()->id);
            }
        } else {
            $this->_helper->redirector('index', 'login', 'admin');
        }
        
        /* Colores */
        $colores = array(
            '5b92d6' => array('5b92d6', '8fbaef'), //azul
            'd6d65b' => array('d6d65b', 'bfbf3f'), //amarillo
            '51ad56' => array('51ad56', '73be78'), //verde
            'db6f70' => array('db6f70', 'e59899'), //rojo
            '5e71a0' => array('5e71a0', '8e9cbc'), //azul oscuro
            'd68e5b' => array('d68e5b', 'e8a97c'), //naranja
            '92989f' => array('92989f', 'bbbec3')); //gris
        $this->view->colorSucursal = $colores[$this->view->usuario->getSucursal()->getColor()];
        /* Colores */
        
        $this->_session = new Zend_Session_Namespace('tema');

        if ($this->_session->tema) {
            $this->view->logo = 'logoVerde.jpg';
            $this->view->colorFondo = '#4D9473';
            $this->view->colorFuente = '#FFF';
            $this->view->colorFuenteContenido = '#000';
            $this->view->colorContenido = '#C6DC94';
            $this->view->colorMenu = 'navbar-inverse';
            $this->view->colorFondoMenuLateral = '#DFDFDF';
        } else {
            $this->view->logo = 'logoBlanco.jpg';
        }
        
        $this->view->headScript()->appendFile($this->view->baseUrl() . '/js/jquery.maskedinput-1.3.min.js');
        $this->view->headScript()->appendFile($this->view->baseUrl() . '/js/cliente_registrar.js');
        
        $this->_personaDao = new Doctrine_Model_PersonaDao();
        $this->_creditoDao = new Doctrine_Model_CreditoDao();
        $this->referenciaDao = new Doctrine_Model_Referencias();
    }

    public function indexAction() {
        
    }
    
    public function registrarAction(){
        
        $this->view->titulo = "Registrar Persona";
        
        $id = $this->getRequest()->getParam("cliente_id");
        
        $cliente = null;
        if ($id):
            $cliente = new Doctrine_Model_Entities_Persona();
            $cliente = $this->_personaDao->obtenerPorId($id);
            
            if (!$cliente):
                $this->_flashMessenger->addMessage(array("error" => "No existe el cliente."));
                $this->_helper->redirector('registrar', 'clientes', 'negocio');
            endif;
            
            $this->view->titulo = "Editar Persona";
            
        endif;
        
        //$this->view->mensaje = $this->_flashMessenger->getCurrentMessages();
        $this->view->mensajes = $this->_flashMessenger->getMessages();
        $this->view->cliente = $cliente;
        
        $this->view->tiposDeDocumentos = $this->referenciaDao->obternerTipoDocumento();
        $this->view->localidades = $this->referenciaDao->obternerLocalidades();
        $this->view->tiposDeDocumentos = $this->referenciaDao->obternerTipoDocumento();
        $this->view->tiposDeTelefonos = $this->referenciaDao->obternerTiposDeTelefonos();
        $this->view->tiposLaborales = $this->referenciaDao->obternerTiposLaborales();
        
    }
    
    public function guardarAction(){
        
        if ($this->getRequest()->isPost()):
            
            $datos = $this->getRequest()->getParams();
        
            if (isset($datos["guardar"])):
            
                if (!$this->_personaDao->existeClienteConDocumento($datos['nro_documento'])):
                    
                    $cliente = null;
                    $cliente = $this->cargarDatosCliente($cliente, $datos);
                    $cliente->setEstado(Doctrine_Model_Referencias::obtenerPorId('Doctrine_Model_Entities_Estado', 1));
                    
                    if ($this->_personaDao->guardar($cliente)):
                        
                        $this->_flashMessenger->addMessage(array("success" => "Cliente guardado correctamente."));
                        $this->_helper->redirector('registrar', 'clientes', 'negocio', array("cliente_id" => $cliente->getId()));
                    else:
                        $this->_flashMessenger->addMessage(array("error" => "Error el intentar guardar el cliente."));
                        $this->_helper->redirector('registrar', 'clientes', 'negocio');
                    endif;
                    
                else:
                    $this->_flashMessenger->addMessage(array("warning" => "El cliente que intenta guardar ya existe."));
                    $this->_helper->redirector('registrar', 'clientes', 'negocio');
                endif;
                
                
            elseif (isset($datos["actualizar"])):
                
                if ($cliente = $this->_personaDao->obtenerPorId($datos["cliente_id"])):
                    $cliente = $this->cargarDatosCliente($cliente, $datos);
                    
                    if ($this->_personaDao->guardar($cliente)):
                        $this->_flashMessenger->addMessage(array("success" => "Cliente actualizado correctamente."));
                        $this->_helper->redirector('registrar', 'clientes', 'negocio', array("cliente_id" => $cliente->getId()));
                    else:
                        $this->_flashMessenger->addMessage(array("error" => "Error el intentar actualizar el cliente."));
                        $this->_helper->redirector('registrar', 'clientes', 'negocio', array("cliente_id" => $cliente->getId()));
                    endif;
                
                else:
                    $this->_flashMessenger->addMessage(array("error" => "El cliente que intenta actualizar no existe."));
                    $this->_helper->redirector('registrar', 'clientes', 'negocio');
                endif;
                
            endif;
            
        endif;
        
        $this->_flashMessenger->addMessage(array("error" => "No existe el cliente."));
        $this->_helper->redirector('registrar', 'clientes', 'negocio');
    }
    
    protected function cargarDatosCliente($cliente, $datos) {
        if (!$cliente):
            $cliente = new Doctrine_Model_Entities_Persona();
            $direcionCliente = new Doctrine_Model_Entities_Direccion();
            $datosLaboral = new Doctrine_Model_Entities_DatosLaboral();
            $direcionLaboral = new Doctrine_Model_Entities_Direccion();
            $cliente->setUsuario($this->view->usuario);
        else:
            $direcionCliente = $cliente->getDireccion();
            $cliente->setTelefonos(new ArrayCollection());
            $datosLaboral = $cliente->getDatosLaborales()->count() ? $cliente->getDatosLaborales()->first() : new Doctrine_Model_Entities_DatosLaboral();
            $datosLaboral->setTelefonos(new ArrayCollection());
            $direcionLaboral = $datosLaboral->getDireccion() ? $datosLaboral->getDireccion() : new Doctrine_Model_Entities_Direccion();
        endif;
        
        $cliente->setTipoDocumento($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_TipoDocumento', $datos['tipo_documento_id']));
        $cliente->setNroDocumento($datos['nro_documento']);
        $cliente->setCuit($datos['cuit']);
        $cliente->setCuit1($datos['cuit1']);
        $cliente->setApellido($datos['apellido']);
        $cliente->setNombres($datos['nombres']);
        $cliente->setSexo($datos['sexo']);
        if (!$datos['fecha_nacimiento'] || $datos['fecha_nacimiento'] == ''):
            $datos['fecha_nacimiento'] = "01/01/1970";
        endif;
        $cliente->setFechaNacimiento(Doctrine_Model_Utilidad::formatoFechaBD($datos['fecha_nacimiento']));
        $cliente->setObservaciones($datos['observacion']);
        
        /* requeridos (SET POR DEFECTO) */
        $cliente->setEstadoCivil($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_EstadoCivil', 6));
        $cliente->setNacionalidad($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_Nacionalidad', 6));
        
        
        $direcionCliente->setDireccion($datos['direccion']);
        $direcionCliente->setNumero($datos['direccion_nro']);
        $direcionCliente->setCodigoPostal($datos['codigo_postal']);
        $direcionCliente->setLocalidad($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_Localidad', $datos['localidad_id']));
        $cliente->setDireccion($direcionCliente);
        
        $numerosDeTelefonos = $datos['telefono_personal'];
        $tiposDeTelefonos = $datos['tipo_telefono_personal'];
        foreach ($numerosDeTelefonos as $key => $value):
            $telefono = new Doctrine_Model_Entities_Telefono();
            $tipoTelefono = $this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_TipoTelefono', $tiposDeTelefonos[$key]);
            $telefono->setNumero($value);
            $telefono->setTipoTelefono($tipoTelefono);
            $cliente->agregarTelefono($telefono);
        endforeach;
        
        $datosLaboral->setLegajo($datos['legajo_1']);
        if (!$datos['empresa_1'] || $datos['empresa_1'] == ''):
            $datos['empresa_1'] = "vacio";
        endif;
        $datosLaboral->setEmpresa($datos['empresa_1']);
        $datosLaboral->setCargo($datos['cargo_1']);
        if (!$datos['lugar_trabajo_1'] || $datos['lugar_trabajo_1'] == ''):
            $datos['lugar_trabajo_1'] = "vacio";
        endif;
        $datosLaboral->setLugarDeTrabajo($datos['lugar_trabajo_1']);
        $datosLaboral->setTipoLaboral($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_TipoLaboral', $datos['tipo_laboral_id_1']));
        $datosLaboral->setFechaIngreso(Doctrine_Model_Utilidad::formatoFechaBD($datos['fecha_ingreso_1']));

        
        $direcionLaboral->setDireccion($datos['direccion_laboral_1']);
        $direcionLaboral->setNumero($datos['direccion_nro_1']);
        $direcionLaboral->setCodigoPostal($datos['codigo_postal_laboral_1']);
        $direcionLaboral->setLocalidad($this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_Localidad', $datos['localidad_laboral_1']));
        $datosLaboral->setDireccion($direcionLaboral);
        
        $numerosDeTelefonosLaboral = $datos['telefono_cliente_laboral_1'];
        $tiposDeTelefonosLaboral = $datos['tipo_telefono_cliente_laboral_1'];
        foreach ($numerosDeTelefonosLaboral as $key => $value):
            $telefono = new Doctrine_Model_Entities_TelefonoLaboral();
            $tipoTelefono = $this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_TipoTelefono', $tiposDeTelefonosLaboral[$key]);
            $telefono->setNumero($value);
            $telefono->setTipoTelefono($tipoTelefono);
            $datosLaboral->agregarTelefono($telefono);
        endforeach;

        $cliente->agregarDatosLaborales($datosLaboral);
        
        return $cliente;
    }
    
    public function listadoAction(){
        
        $nro_credito = $this->getRequest()->getParam("b_nro_credito", null);
        $nro_documento = $this->getRequest()->getParam("b_nro_documento", null);
        $apellido = $this->getRequest()->getParam("b_apellido", null);
        $nombres = $this->getRequest()->getParam("b_nombres", null);
        $telefono = $this->getRequest()->getParam("b_telefono", null);
        
        $yaBuscado = false;
        
        $conjuntoClientes = array();
        
        if ($nro_credito) {
            $creditos = $this->_creditoDao->obtenerPorNroCredito($nro_credito);
            if (count($creditos)) {
                if ($creditos[0]->getUsuario()->getSucursal()->getId() == $this->view->usuario->getSucursal()->getId())
                    $conjuntoClientes[] = $creditos[0]->getCliente();
            }
        }
        if ($nro_documento) {
            $conjuntoClientes = $this->_personaDao->obtenerPorNroDocumento($nro_documento);
        }
        if ($apellido && $nombres) {
            $conjuntoClientes = $this->_personaDao->obtenerPorNombreApellido($nombres, $apellido);
            $yaBuscado = true;
        }
        if (!$yaBuscado) {
            if ($apellido) {
                $conjuntoClientes = $this->_personaDao->obtenerPorApellido($apellido);
            }
            if ($nombres) {
                $conjuntoClientes = $this->_personaDao->obtenerPorNombres($nombres);
            }
        }
        if ($telefono) {
            $conjuntoClientes = $this->_personaDao->obtenerPorTelefono($telefono);
        }
        
        $solo_los_de_negocio = false;
        if (!$conjuntoClientes && !$nro_credito && !$nro_documento && !$apellido && !$nombres && !$telefono):
            $conjuntoClientes = $this->_personaDao->obtenerTodos();
            $solo_los_de_negocio = true;
        endif;
        
        $cliente = new Doctrine_Model_Entities_Persona();
        
        $clientesDelNegocio = array();
        $otrosClientes = array();
        foreach ($conjuntoClientes as $cliente):
            $found = false;
            $creditos = $cliente->getCreditos();
            foreach ($creditos as $credito):
                if ($credito->getUsuario()->getSucursal()->getId() == $this->view->usuario->getSucursal()->getId()):
                    $clientesDelNegocio[] = $cliente;
                    $found = true;
                    break;
                endif;
            endforeach;
            if (!$found):
                $otrosClientes[] = $cliente;
            endif;
        endforeach;
        
        if ($solo_los_de_negocio):
            unset($otrosClientes);
        endif;
        
        /* parameters */
        $this->view->b_nro_credito = $nro_credito;
        $this->view->b_nro_documento = $nro_documento;
        $this->view->b_apellido = $apellido;
        $this->view->b_nombres = $nombres;
        $this->view->b_telefono = $telefono;
        
        $this->view->clientesDelNegocio = $clientesDelNegocio;
        $this->view->otrosClientes = $otrosClientes;
        
    }

    public function buscarclienteAction(){
        
        $nro_documento = $this->getRequest()->getParam("nro_documento", null);
        $tipo_documento = $this->getRequest()->getParam("tipo_documento", null);
        
        if (!$nro_documento || !$tipo_documento):
            $this->_flashMessenger->addMessage(array("error" => "Tipo y N&uacute;mero de documento son necesarios."));
            $this->_helper->redirector('registrar', 'clientes', 'negocio');
        endif;
        
        $cliente = new Doctrine_Model_Entities_Persona();
        $cliente = $this->_personaDao->obtenerPorNumeroyTipoDeDocumento($nro_documento, $tipo_documento);
        
        $credito = new Doctrine_Model_Entities_Credito();
        if ($cliente):
            $found = true;
        
//            if (!$cliente->getCreditos()->count()):
//                if ($cliente->getUsuario()->getSucursal()->getId() == $this->view->usuario->getSucursal()->getId()):
//                    $found = true;
//                endif;
//            endif;
        
         //   foreach ($cliente->getCreditos() as $credito):
                 $found = true;
//                if ($credito->getUsuario()->getSucursal()->getId() == $this->view->usuario->getSucursal()->getId()):
//                    $found = true;
//                    break;
//                endif;
          //  endforeach;
            
            if ($found):
                $this->_helper->redirector('registrar', 'clientes', 'negocio', array("cliente_id" => $cliente->getId()));
            endif;
            
            $this->_flashMessenger->addMessage(array("error" => "No tiene permisos para ver los datos de esta persona."));
            $this->_helper->redirector('registrar', 'clientes', 'negocio');
        else:
            $tipoDocumento = $this->referenciaDao->obtenerPorId('Doctrine_Model_Entities_TipoDocumento', $tipo_documento);
            $this->_flashMessenger->addMessage(array("error" => "No existe la persona con documento: <strong>({$tipoDocumento->getDescripcion()}) {$nro_documento}</strong>."));
            $this->_helper->redirector('registrar', 'clientes', 'negocio');
        endif;
        
        
    }
    
}

